DatabaseObject

REALSQLdatabase Class

The REALSQLdatabase class provides access to the REALSQLdatabase data source, a.k.a., database engine or database back-end. It is based on SQLite, which is described at http://www.SQLite.org. Both the Standard and Professional versions of REALbasic fully support the REALSQLdatabase database engine.

Properties

AutoCommit

DatabaseFile

ShortColumnNames

Methods

AttachDatabase

CreateDataBaseFile

DetachDatabase

LastRowID

Notes

Plug-ins for other database engines are supported only in the Professional version of REALbasic.

Use the REALSQLdatabase class to open or create REALSQLdatabases programmatically. A REALSQLdatabase can also be created or opened with the Project . Add . Database submenu and designed with a graphical user interface.

The REALSQLdatabase is not supported on Mac OS "classic" builds. Use the REALDatabase engine that was introduced in version 5.5 of REALbasic.


The REALSQLdatabase supports a subset of SQL/92 and SQL/99, including queries that involve self-joins, aggregate functions, and more. For the set of features the new REALSQLdatabase engine supports, its syntax is fully SQL compliant. It returns SQLite error codes. Please refer to Appendix A of the printed or pdf version of the Language Reference or http://www.sqlite.org/docs.html for information on the SQL supported by the REALSQLdatabase engine.

A call to SQLSelect returns a dynamic RecordSet; you can move forward, backward, or jump to the beginning or end as much as you like.

The REALSQLdatabase engine supports transactions, both for schema changes and for data changes. A transaction is started automatically when you make any change to the database and is ended by calling either the Commit or Rollback methods of the Database class.

Boolean Values

Boolean fields are now more strict about what they expect when using the DatabaseField.BooleanValue function. Previously, "0" and "False" were treated as False and anything else was treated as True. Now, "0" and "False" are treated as False and "1" and "True" are treated as True. The behavior of any other values is undefined if retrieved using DatabaseField.BooleanValue.

DatabaseField.StringValue, on the other hand, should be able to retrieve the original data if it can't be identified as a Boolean. If the REAL SQL Database can identify the value as a boolean, however, then "False" will always return False and "True" will always return True, regardless of how those values are stored in the database.

This is a side effect of the way in which database engines interact with the database API in the REALbasic framework. Note that the change to DatabaseField.BooleanValue should only be an issue if you are trying to store non-boolean data in a boolean column.

Result Codes

The REALSQLdatabase engine sets the Database class's Error flag after each operation and returns values in the ErrorCode and ErrorMessage properties. When the Error flag is False, the ErrorCode is "0" and the ErrorMessage is "Not an error". If the Error flag is True, the following codes and messages are returned in ErrorMessage

REAL SQL Database returns SQLite error codes as follows.

Error code

Error Message

0

Not an error

1

SQL logic error or missing database

2

Internal SQLite implementation flaw

3

Access permission denied

4

Callback requested query abort

5

Database is locked

6

Database table is locked

7

Out of memory

8

Attempt to write a readonly database

9

Interrupted

10

Disk I/O error

11

Database disk image is malformed

12

Table or record not found

13

Database is full

14

Unable to open database file

15

Database locking protocol failure

16

Table contains no data

17

Database schema has changed

18

Too much data for one table row

19

Constraint failed

20

Datatype mismatch

21

Library routine called out of sequence

22

Kernel lacks large file support

23

Authorization denied

24

Auxiliary database format error

25

Bind or column index out of range

26

File is encrypted or is not a database


Primary Keys

All REAL SQL Database tables have an Integer Primary Key column. If you don't explicitly such a column, one will be created for you. You can refer to the INTEGER PRIMARY KEY column using the "rowid" keyword. But, if you don't explicitly define your own INTEGER PRIMARY KEY column, you won't get the 'rowid' column unless you ask for it in queries, such as in the statement:

SELECT rowid,* FROM tableName

Data Types

The following table contains information about the data types used by REAL SQL Database.

FieldType

Description

Binary

Stores code, images, and hexadecimal data. Consult the documentation of your data source for information on the maximum size of a Binary field.

Blob

Stores a binary object. The REAL SQL Database supports blobs of up to any size. Furthermore, a blob can be stored in a column of any declared data affinity. If you are using another data source, check the documentation of your data source. Blob data can be inserted into a REAL SQL Database using the BlobColumn method of the DatabaseRecord class.

Boolean

Stores the values of TRUE or FALSE. When retrieved by DatabaseField.BooleanValue, "0" and "False" are interpreted as False and "1" and "True" are interpreted as True. All other values are not defined. When retrieved by DatabaseField.StringValue, other values in a Boolean field may retrieved successfully.

Date

Stores year, month, and day values of a date in the format YYYY-MM-DD. The year value is four digits; the month and day values are two digits.

Double

Stores double-precision floating-point numbers.

Float

Stores floating-point numeric values with a precision that you specify, i.e., FLOAT (5).

Integer

A numeric data type with no fractional part. The maximum number of digits is implementation-specific. The REAL database supports 4-byte integers, which provide a range of ±2,000,000,000. If you are using another data source, check the documentation of your data source.

SmallInt

A numeric data type with no fractional part. The maximum number of digits is implementation-specific, but is usually less than or equal to INTEGER. The REAL database supports 2-byte smallints, which allow you to store values in the range of ±32,767. If you are using another data source, check the documentation of your data source.

Text

Stores alphabetic data as a text string, using the database's encoding.

Time

Stores hour, minute, and second values of a time in the format HH:MM:SS. The hours and minutes are two digits. The seconds values is also two digits, may include a optional fractional part, e.g., 09:55:25.248. The default length of the fractional part is zero.

TimeStamp

Stores both date and time information in the format YYYY-MM-DD HH:MM:SS. The lengths of the components of a TimeStamp are the same as for Time and Date, except that the default length of the fractional part of the time component is six digits rather than zero. If a TimeStamp values has no fractional component, then its length is 19 digits If it has a fractional component, its length is 20 digits, plus the length of the fractional component.

VarChar

Stores alphabetic data, in which the number of characters vary from record to record, but you don't want to pad the unused characters with blanks. REAL SQL Database converts text to UTF-8 text encoding. SQLite expects text to be in that encoding.



Creating a REALSQLdatabase

You can create a REALSQLdatabase via the IDE by choosing Project . Add . Database . New REAL SQL Database. REALbasic will then present a standard save-file dialog box in which you can name the database and specify the directory in which it will be stored.

When you click OK, a REALSQLdatabase will be added to your project, with the name you entered in the dialog. You can double-click the item to add tables, fields, and indexes. When data have been entered, you can use a table viewer to view the data. For more information, see the chapter on Databases in the Users Guide.


Examples

The following example creates a new REALSQLdatabase:

Dim db as REALSQLdatabase
Dim f as FolderItem
f= New FolderItem("mydb")
db= New REALSQLdatabase
db.databaseFile=f
If db.CreateDatabaseFile then
  //proceed with database operations...
else
   MsgBox "Database not created"
end if

The following example opens an existing REALSQLdatabase.

Dim dbFile as FolderItem
Dim db as REALSQLdatabase
db= New REALSQLdatabase
dbFile = GetFolderItem("Pubs")
db.DatabaseFile=dbFile
If db.Connect() then
  //proceed with database operations here..
else
  Beep
  MsgBox "The database couldn't be opened."
end if

The following example adds a record to a table.

Dim dbFile as FolderItem
Dim db as REALSQLdatabase
db= New REALSQLdatabase
Dim rs As New RecordSet
dbFile= New FolderItem("Employees")
db.databaseFile=dbFile
if db.error then
  MsgBox  db.errormessage
else
  db.sqlexecute ("Insert into Employees (Name,Job,YearJoined) Values " _
        +"('Dr.Strangelove','Advisor',1962)")
 If db.error then
   MsgBox db.errormessage
 else
  db.Commit
 end if
end if

See Also

Database, DatabaseRecord, RecordSet classes.